home *** CD-ROM | disk | FTP | other *** search
/ Aminet 4 / Aminet 4 - November 1994.iso / aminet / dev / gcc / gcc260utilsdoc.lha / gnu / man / man1 / patch.1 < prev    next >
Encoding:
Text File  |  1994-07-28  |  19.2 KB  |  529 lines

  1.  
  2.  
  3.  
  4. PATCH(1)                 USER COMMANDS                   PATCH(1)
  5.  
  6.  
  7.  
  8. NAME
  9.      patch - apply a diff file to an original
  10.  
  11. SYNOPSIS
  12.      patch [options] [origfile [patchfile]] [+  [options]  [orig-
  13.      file]]...
  14.  
  15.      but usually just
  16.  
  17.      patch <patchfile
  18.  
  19. DESCRIPTION
  20.      _P_a_t_c_h will take a patch file  containing  any  of  the  four
  21.      forms of difference listing produced by the _d_i_f_f program and
  22.      apply those differences to an  original  file,  producing  a
  23.      patched  version.  By default, the patched version is put in
  24.      place of the original, with the original file backed  up  to
  25.      the  same  name  with  the extension ".orig" ("~" on systems
  26.      that do not support long file names), or as specified by the
  27.      -b  (--suffix),  -B  (--prefix),  or  -V (--version-control)
  28.      options.  The extension used for  making  backup  files  may
  29.      also  be  specified  in the SIMPLE_BACKUP_SUFFIX environment
  30.      variable, which is overridden by the above options.
  31.  
  32.      If the backup file  already  exists,  patch  creates  a  new
  33.      backup  file  name by changing the first lowercase letter in
  34.      the last component of the file's name  into  uppercase.   If
  35.      there  are no more lowercase letters in the name, it removes
  36.      the first character from the name.  It repeats this  process
  37.      until  it  comes up with a backup file that does not already
  38.      exist.
  39.  
  40.      You may also specify where you want the output to go with  a
  41.      -o  (--output)  option;  if  that file already exists, it is
  42.      backed up first.
  43.  
  44.      If _p_a_t_c_h_f_i_l_e is omitted, or is a hyphen, the patch  will  be
  45.      read from standard input.
  46.  
  47.      Upon startup, patch will attempt to determine  the  type  of
  48.      the  diff listing, unless over-ruled by a -c (--context), -e
  49.      (--ed), -n (--normal), or -u  (--unified)  option.   Context
  50.      diffs  (old-style,  new-style, and unified) and normal diffs
  51.      are applied by the _p_a_t_c_h program itself, while _e_d diffs  are
  52.      simply fed to the _e_d editor via a pipe.
  53.  
  54.      _P_a_t_c_h will try to skip any leading garbage, apply the  diff,
  55.      and  then skip any trailing garbage.  Thus you could feed an
  56.      article or message containing a diff listing to  _p_a_t_c_h,  and
  57.      it  should  work.   If the entire diff is indented by a con-
  58.      sistent amount, this will be taken into account.
  59.  
  60.  
  61.  
  62.  
  63. Sun Release 4.1        Last change: LOCAL                       1
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. PATCH(1)                 USER COMMANDS                   PATCH(1)
  71.  
  72.  
  73.  
  74.      With context diffs, and  to  a  lesser  extent  with  normal
  75.      diffs,  _p_a_t_c_h  can detect when the line numbers mentioned in
  76.      the patch are  incorrect,  and  will  attempt  to  find  the
  77.      correct  place  to apply each hunk of the patch.  As a first
  78.      guess, it takes the line number mentioned for the hunk, plus
  79.      or  minus any offset used in applying the previous hunk.  If
  80.      that is not the correct place, _p_a_t_c_h will scan both forwards
  81.      and  backwards for a set of lines matching the context given
  82.      in the hunk.  First _p_a_t_c_h looks for a place where all  lines
  83.      of the context match.  If no such place is found, and it's a
  84.      context diff, and the maximum fuzz factor is  set  to  1  or
  85.      more,  then  another scan takes place ignoring the first and
  86.      last line of context.  If that fails, and the  maximum  fuzz
  87.      factor is set to 2 or more, the first two and last two lines
  88.      of context are ignored, and  another  scan  is  made.   (The
  89.      default  maximum  fuzz  factor is 2.) If _p_a_t_c_h cannot find a
  90.      place to install that hunk of the patch,  it  will  put  the
  91.      hunk out to a reject file, which normally is the name of the
  92.      output file plus ".rej" ("#" on systems that do not  support
  93.      long  file  names).   (Note that the rejected hunk will come
  94.      out in context diff form whether the input patch was a  con-
  95.      text diff or a normal diff.  If the input was a normal diff,
  96.      many of the contexts will simply be null.) The line  numbers
  97.      on the hunks in the reject file may be different than in the
  98.      patch file: they  reflect  the  approximate  location  patch
  99.      thinks  the  failed hunks belong in the new file rather than
  100.      the old one.
  101.  
  102.      As each hunk is completed, you will be told whether the hunk
  103.      succeeded  or failed, and which line (in the new file) _p_a_t_c_h
  104.      thought the hunk should go on.  If this  is  different  from
  105.      the  line  number specified in the diff you will be told the
  106.      offset.  A single large offset MAY be an indication  that  a
  107.      hunk  was  installed  in  the wrong place.  You will also be
  108.      told if a fuzz factor was used to make the match,  in  which
  109.      case you should also be slightly suspicious.
  110.  
  111.      If no original file is specified on the command line,  _p_a_t_c_h
  112.      will  try  to  figure  out from the leading garbage what the
  113.      name of the file to edit is.  In the  header  of  a  context
  114.      diff, the file name is found from lines beginning with "***"
  115.      or "---", with the shortest name of an  existing  file  win-
  116.      ning.  Only context diffs have lines like that, but if there
  117.      is an "Index:" line in the leading garbage, _p_a_t_c_h  will  try
  118.      to  use  the  file  name  from  that line.  The context diff
  119.      header takes precedence over an Index line.  If no file name
  120.      can  be intuited from the leading garbage, you will be asked
  121.      for the name of the file to patch.
  122.  
  123.      If the original file cannot be found or is read-only, but  a
  124.      suitable  SCCS  or  RCS file is handy, _p_a_t_c_h will attempt to
  125.      get or check out the file.
  126.  
  127.  
  128.  
  129. Sun Release 4.1        Last change: LOCAL                       2
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. PATCH(1)                 USER COMMANDS                   PATCH(1)
  137.  
  138.  
  139.  
  140.      Additionally, if the leading garbage contains a  "Prereq:  "
  141.      line,  _p_a_t_c_h will take the first word from the prerequisites
  142.      line (normally a version number) and check the input file to
  143.      see  if  that word can be found.  If not, _p_a_t_c_h will ask for
  144.      confirmation before proceeding.
  145.  
  146.      The upshot of all this is that you should be  able  to  say,
  147.      while in a news interface, the following:
  148.  
  149.           | patch -d /usr/src/local/blurfl
  150.  
  151.      and patch a file in the blurfl directory directly  from  the
  152.      article containing the patch.
  153.  
  154.      If the patch file contains more than one patch,  _p_a_t_c_h  will
  155.      try  to  apply  each  of  them as if they came from separate
  156.      patch files.  This means, among other  things,  that  it  is
  157.      assumed  that  the  name of the file to patch must be deter-
  158.      mined for each diff listing, and  that  the  garbage  before
  159.      each  diff  listing  will be examined for interesting things
  160.      such as file names and revision level, as  mentioned  previ-
  161.      ously.   You  can  give  options  (and another original file
  162.      name) for the second and subsequent  patches  by  separating
  163.      the  corresponding  argument  lists by a '+'.  (The argument
  164.      list for a second or subsequent patch may not specify a  new
  165.      patch file, however.)
  166.  
  167.      _P_a_t_c_h recognizes the following options:
  168.  
  169.      -b suff, --suffix=suff
  170.           causes suff to be interpreted as the backup  extension,
  171.           to be used in place of ".orig" or "~".
  172.  
  173.      -B pref, --prefix=pref
  174.           causes pref to be interpreted as a prefix to the backup
  175.           file  name. If this argument is specified, any argument
  176.           from -b will be ignored.
  177.  
  178.      -c, --context
  179.           forces _p_a_t_c_h to interpret the patch file as  a  context
  180.           diff.
  181.  
  182.      -d dir, --directory=dir
  183.           causes _p_a_t_c_h to interpret dir as a directory, and cd to
  184.           it before doing anything else.
  185.  
  186.      -D sym, --ifdef=sym
  187.           causes _p_a_t_c_h to use the "#ifdef...#endif" construct  to
  188.           mark  changes.  sym will be used as the differentiating
  189.           symbol.
  190.  
  191.      -e, --ed
  192.  
  193.  
  194.  
  195. Sun Release 4.1        Last change: LOCAL                       3
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. PATCH(1)                 USER COMMANDS                   PATCH(1)
  203.  
  204.  
  205.  
  206.           forces _p_a_t_c_h to interpret  the  patch  file  as  an  _e_d
  207.           script.
  208.  
  209.      -E, --remove-empty-files
  210.           causes _p_a_t_c_h to remove  output  files  that  are  empty
  211.           after the patches have been applied.
  212.  
  213.      -f, --force
  214.           forces _p_a_t_c_h to assume that the user knows exactly what
  215.           he  or  she is doing, and to not ask any questions.  It
  216.           assumes the following: skip patches for which a file to
  217.           patch can't be found; patch files even though they have
  218.           the wrong version  for  the  ``Prereq:''  line  in  the
  219.           patch; and assume that patches are not reversed even if
  220.           they look like they are.  This option does not suppress
  221.           commentary; use -s for that.
  222.  
  223.      -t, --batch
  224.           similar to -f, in that  it  suppresses  questions,  but
  225.           makes  some  different  assumptions:  skip  patches for
  226.           which a file to patch can't be found (the same as  -f);
  227.           skip  patches  for which the file has the wrong version
  228.           for the ``Prereq:'' line in the patch; and assume  that
  229.           patches are reversed if they look like they are.
  230.  
  231.      -F number, --fuzz=number
  232.           sets the maximum fuzz factor.  This option only applies
  233.           to context diffs, and causes _p_a_t_c_h to ignore up to that
  234.           many lines in looking for places  to  install  a  hunk.
  235.           Note  that a larger fuzz factor increases the odds of a
  236.           faulty patch.  The default fuzz factor is 2, and it may
  237.           not  be set to more than the number of lines of context
  238.           in the context diff, ordinarily 3.
  239.  
  240.      -l, --ignore-whitespace
  241.           causes the pattern matching to be done loosely, in case
  242.           the  tabs  and  spaces  have  been munged in your input
  243.           file.  Any sequence of whitespace in the  pattern  line
  244.           will  match  any  sequence  in  the input file.  Normal
  245.           characters must still match exactly.  Each line of  the
  246.           context must still match a line in the input file.
  247.  
  248.      -n, --normal
  249.           forces _p_a_t_c_h to interpret the patch file  as  a  normal
  250.           diff.
  251.  
  252.      -N, --forward
  253.           causes _p_a_t_c_h to  ignore  patches  that  it  thinks  are
  254.           reversed or already applied.  See also -R .
  255.  
  256.      -o file, --output=file
  257.           causes file to be interpreted as the output file name.
  258.  
  259.  
  260.  
  261. Sun Release 4.1        Last change: LOCAL                       4
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. PATCH(1)                 USER COMMANDS                   PATCH(1)
  269.  
  270.  
  271.  
  272.      -p[number], --strip[=number]
  273.           sets the pathname strip count, which controls how path-
  274.           names  found in the patch file are treated, in case the
  275.           you keep your files in a different directory  than  the
  276.           person  who sent out the patch.  The strip count speci-
  277.           fies how many slashes are to be stripped from the front
  278.           of the pathname.  (Any intervening directory names also
  279.           go away.) For example, supposing the file name  in  the
  280.           patch file was
  281.  
  282.                /u/howard/src/blurfl/blurfl.c
  283.  
  284.           setting -p or -p0 gives the entire pathname unmodified,
  285.           -p1 gives
  286.  
  287.                u/howard/src/blurfl/blurfl.c
  288.  
  289.           without the leading slash, -p4 gives
  290.  
  291.                blurfl/blurfl.c
  292.  
  293.           and not specifying -p at all just gives you "blurfl.c",
  294.           unless  all  of  the  directories  in  the leading path
  295.           (u/howard/src/blurfl) exist and that path is  relative,
  296.           in  which  case you get the entire pathname unmodified.
  297.           Whatever you end up with is looked for  either  in  the
  298.           current directory, or the directory specified by the -d
  299.           option.
  300.  
  301.      -r file, --reject-file=file
  302.           causes file to be interpreted as the reject file name.
  303.  
  304.      -R, --reverse
  305.           tells _p_a_t_c_h that this patch was created  with  the  old
  306.           and new files swapped.  (Yes, I'm afraid that does hap-
  307.           pen occasionally, human nature being what it is.) _P_a_t_c_h
  308.           will  attempt  to swap each hunk around before applying
  309.           it.  Rejects will come out in the swapped format.   The
  310.           -R  option  will  not work with _e_d diff scripts because
  311.           there is too  little  information  to  reconstruct  the
  312.           reverse operation.
  313.  
  314.           If the first hunk of a patch fails, _p_a_t_c_h will  reverse
  315.           the  hunk  to see if it can be applied that way.  If it
  316.           can, you will be asked if  you  want  to  have  the  -R
  317.           option set.  If it can't, the patch will continue to be
  318.           applied normally.  (Note: this method cannot  detect  a
  319.           reversed  patch if it is a normal diff and if the first
  320.           command is an  append  (i.e.  it  should  have  been  a
  321.           delete)  since  appends always succeed, due to the fact
  322.           that a null context will match anywhere.  Luckily, most
  323.           patches add or change lines rather than delete them, so
  324.  
  325.  
  326.  
  327. Sun Release 4.1        Last change: LOCAL                       5
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334. PATCH(1)                 USER COMMANDS                   PATCH(1)
  335.  
  336.  
  337.  
  338.           most reversed normal diffs will begin  with  a  delete,
  339.           which will fail, triggering the heuristic.)
  340.  
  341.      -s, --silent, --quiet
  342.           makes _p_a_t_c_h do  its  work  silently,  unless  an  error
  343.           occurs.
  344.  
  345.      -S, --skip
  346.           causes _p_a_t_c_h to ignore this patch from the patch  file,
  347.           but continue on looking for the next patch in the file.
  348.           Thus
  349.  
  350.                patch -S + -S + <patchfile
  351.  
  352.           will ignore the first and second of three patches.
  353.  
  354.      -u, --unified
  355.           forces _p_a_t_c_h to interpret the patch file as  a  unified
  356.           context diff (a unidiff).
  357.  
  358.      -v, --version
  359.           causes _p_a_t_c_h to print out its revision header and patch
  360.           level.
  361.  
  362.      -V method, --version--control=method
  363.           causes method to be interpreted as a method for  creat-
  364.           ing  backup  file  names.  The type of backups made can
  365.           also be given in the VERSION_CONTROL environment  vari-
  366.           able,  which  is  overridden  by  this  option.  The -B
  367.           option overrides this option,  causing  the  prefix  to
  368.           always be used for making backup file names.  The value
  369.           of the VERSION_CONTROL  environment  variable  and  the
  370.           argument  to  the  -V  option  are  like  the GNU Emacs
  371.           `version-control'   variable;   they   also   recognize
  372.           synonyms  that  are more descriptive.  The valid values
  373.           are (unique abbreviations are accepted):
  374.  
  375.           `t' or `numbered'
  376.                Always make numbered backups.
  377.  
  378.           `nil' or `existing'
  379.                Make numbered backups of files that  already  have
  380.                them,  simple  backups of the others.  This is the
  381.                default.
  382.  
  383.           `never' or `simple'
  384.                Always make simple backups.
  385.  
  386.      -x number, --debug=number
  387.           sets internal debugging flags, and is of interest  only
  388.           to _p_a_t_c_h patchers.
  389.  
  390.  
  391.  
  392.  
  393. Sun Release 4.1        Last change: LOCAL                       6
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400. PATCH(1)                 USER COMMANDS                   PATCH(1)
  401.  
  402.  
  403.  
  404. AUTHOR
  405.      Larry Wall <lwall@netlabs.com>
  406.      with many other contributors.
  407.  
  408. ENVIRONMENT
  409.      TMPDIR
  410.           Directory to put temporary files in; default is /tmp.
  411.  
  412.      SIMPLE_BACKUP_SUFFIX
  413.           Extension to use  for  backup  file  names  instead  of
  414.           ".orig" or "~".
  415.  
  416.      VERSION_CONTROL
  417.           Selects when numbered backup files are made.
  418.  
  419. FILES
  420.      $TMPDIR/patch*
  421.  
  422. SEE ALSO
  423.      diff(1)
  424.  
  425. NOTES FOR PATCH SENDERS
  426.      There are several things you should bear in mind if you  are
  427.      going to be sending out patches.  First, you can save people
  428.      a lot of grief by  keeping  a  patchlevel.h  file  which  is
  429.      patched  to  increment  the patch level as the first diff in
  430.      the patch file you send out.  If you put a Prereq:  line  in
  431.      with the patch, it won't let them apply patches out of order
  432.      without some warning.  Second, make  sure  you've  specified
  433.      the  file  names  right, either in a context diff header, or
  434.      with an Index: line.  If you are  patching  something  in  a
  435.      subdirectory, be sure to tell the patch user to specify a -p
  436.      option as needed.  Third, you can create a file  by  sending
  437.      out a diff that compares a null file to the file you want to
  438.      create.  This will only work if the file you want to  create
  439.      doesn't exist already in the target directory.  Fourth, take
  440.      care not to send out reversed patches, since it makes people
  441.      wonder whether they already applied the patch.  Fifth, while
  442.      you may be able to get away with putting 582  diff  listings
  443.      into one file, it is probably wiser to group related patches
  444.      into separate files in case something goes haywire.
  445.  
  446. DIAGNOSTICS
  447.      Too many to list here, but generally indicative  that  _p_a_t_c_h
  448.      couldn't parse your patch file.
  449.  
  450.      The message "Hmm..." indicates  that  there  is  unprocessed
  451.      text  in  the  patch  file  and  that _p_a_t_c_h is attempting to
  452.      intuit whether there is a patch in that  text  and,  if  so,
  453.      what kind of patch it is.
  454.  
  455.  
  456.  
  457.  
  458.  
  459. Sun Release 4.1        Last change: LOCAL                       7
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466. PATCH(1)                 USER COMMANDS                   PATCH(1)
  467.  
  468.  
  469.  
  470.      _P_a_t_c_h will exit with a non-zero status if any  reject  files
  471.      were  created.   When applying a set of patches in a loop it
  472.      behooves you to check this exit status so you don't apply  a
  473.      later patch to a partially patched file.
  474.  
  475. CAVEATS
  476.      _P_a_t_c_h cannot tell if the line  numbers  are  off  in  an  _e_d
  477.      script,  and  can  only  detect bad line numbers in a normal
  478.      diff when it finds a "change" or a "delete" command.  A con-
  479.      text  diff  using  fuzz  factor 3 may have the same problem.
  480.      Until a suitable interactive interface is added, you  should
  481.      probably  do  a  context  diff  in these cases to see if the
  482.      changes made sense.  Of course, compiling without errors  is
  483.      a  pretty  good  indication  that  the patch worked, but not
  484.      always.
  485.  
  486.      _P_a_t_c_h usually produces the correct results, even when it has
  487.      to   do  a  lot  of  guessing.   However,  the  results  are
  488.      guaranteed to be correct only when the patch is  applied  to
  489.      exactly the same version of the file that the patch was gen-
  490.      erated from.
  491.  
  492. BUGS
  493.      Could be smarter about partial matches, excessively  deviant
  494.      offsets and swapped code, but that would take an extra pass.
  495.  
  496.      If code has been duplicated (for instance with  #ifdef  OLD-
  497.      CODE  ... #else ...  #endif), _p_a_t_c_h is incapable of patching
  498.      both versions, and, if it works at all,  will  likely  patch
  499.      the wrong one, and tell you that it succeeded to boot.
  500.  
  501.      If you apply a patch  you've  already  applied,  _p_a_t_c_h  will
  502.      think  it  is  a  reversed  patch, and offer to un-apply the
  503.      patch.  This could be construed as a feature.
  504.  
  505.  
  506.  
  507.  
  508.  
  509.  
  510.  
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525. Sun Release 4.1        Last change: LOCAL                       8
  526.  
  527.  
  528.  
  529.